package com.ktg.common.core.domain;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.ktg.common.constant.HttpStatus;
import com.ktg.common.core.domain.model.SqlResult;
import lombok.Data;

import javax.swing.table.TableColumn;
import java.util.List;

@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Result<T> {

    private Integer code;

    private String msg;

    private T data;

    /**
     * 成功标志
     */
    private boolean success = true;

    private List<TableColumn> columns;




    public static Result OK() {
        Result jsonData = new Result();
        jsonData.setCode(HttpStatus.SUCCESS);
        jsonData.setMsg("Success");
        return jsonData;
    }

    public static Result OK(String msg) {
        Result jsonData = new Result();
        jsonData.setCode(HttpStatus.SUCCESS);
        jsonData.setMsg(msg);
        jsonData.setSuccess(true);
        return jsonData;
    }

    public static Result OK(Object object) {
        Result jsonData = new Result();
        jsonData.setData(object);
        jsonData.setCode(HttpStatus.SUCCESS);
        jsonData.setMsg("Success");
        jsonData.setSuccess(true);
        return jsonData;
    }


    public static Result OK(String msg, Object object) {
        Result jsonData = new Result();
        jsonData.setData(object);
        jsonData.setCode(HttpStatus.SUCCESS);
        jsonData.setMsg(msg);
        jsonData.setSuccess(true);
        return jsonData;
    }

    public static Result OK(String msg, Object object,List<TableColumn> columns) {
        Result jsonData = new Result();
        jsonData.setColumns(columns);
        jsonData.setData(object);
        jsonData.setCode(HttpStatus.SUCCESS);
        jsonData.setMsg(msg);
        jsonData.setSuccess(true);
        return jsonData;
    }

    public static Result ERROR(Integer code, String message) {
        Result jsonData = new Result();
        jsonData.setCode(code);
        jsonData.setMsg(message);
        jsonData.setSuccess(false);
        jsonData.setData(message);
        return jsonData;
    }

    public static Result ERROR(Integer code, String message,Object data) {
        Result jsonData = new Result();
        jsonData.setCode(code);
        jsonData.setMsg(message);
        jsonData.setSuccess(false);
        jsonData.setData(data);
        return jsonData;
    }

    public static Result ERROR(String msg, String data) {
        Result jsonData = new Result();
        jsonData.setMsg(msg);
        jsonData.setData(data);
        jsonData.setSuccess(false);
        return jsonData;
    }

    public static Result ERROR(String msg) {
        Result jsonData = new Result();
        jsonData.setMsg(msg);
        jsonData.setCode(HttpStatus.ERROR);
        jsonData.setSuccess(false);
        return jsonData;
    }

    public Result setColumns(List<TableColumn> columns) {
        this.columns = columns;
        return this;
    }
}
